// 为sockjs-client提供浏览器环境的polyfill
global = global || window;

import { createApp, reactive, provide } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { NotificationPlugin } from './utils/notificationService.js'

const app = createApp(App)

// 创建用户状态管理
const userStore = reactive({
  username: '管理员',
  avatar: '/assets/640-8.svg', // 设置默认头像
  // 初始化用户信息
  initUserInfo() {
    const userInfo = localStorage.getItem('userInfo')
    if (userInfo) {
      try {
        const user = JSON.parse(userInfo)
        this.username = user.username || '管理员'
        // 处理头像地址，去除可能的反引号和空格
        let avatarUrl = user.avatar
        if (typeof avatarUrl === 'string') {
          avatarUrl = avatarUrl.replace(/[`]/g, '').trim()
        }
        // 如果用户没有设置头像，使用默认头像
        this.avatar = avatarUrl || '/assets/640-8.svg'
      } catch (error) {
        // 使用更具体的错误信息
        console.error('解析用户信息失败:', error.message || error)
      }
    }
  },
  // 更新用户信息
  updateUserInfo(userData) {
    // 更新本地存储
    const userInfo = localStorage.getItem('userInfo')
    const user = userInfo ? JSON.parse(userInfo) : {}
    
    // 处理头像地址，去除可能的反引号和空格
    if (userData.avatar !== undefined) {
      let avatarUrl = userData.avatar
      // 去除反引号和前后空格
      if (typeof avatarUrl === 'string') {
        avatarUrl = avatarUrl.replace(/[`]/g, '').trim()
      }
      userData.avatar = avatarUrl
    }
    
    Object.assign(user, userData)
    localStorage.setItem('userInfo', JSON.stringify(user))
    
    // 更新状态
    if (userData.username !== undefined) {
      this.username = userData.username
    }
    if (userData.avatar !== undefined) {
      // 如果设置为空，使用默认头像
      this.avatar = userData.avatar || '/assets/640-8.svg'
    }
  }
})

// 提供用户状态给所有组件
app.provide('userStore', userStore)

// 初始化用户信息
userStore.initUserInfo()

// 注册Element Plus
app.use(ElementPlus, {
  zIndex: 3000
})

// 注册通知服务插件
app.use(NotificationPlugin)

// 注册Element Plus图标
Object.keys(ElementPlusIconsVue).forEach(key => {
  app.component(key, ElementPlusIconsVue[key])
})

// 使用路由
app.use(router)

// 挂载应用
app.mount('#app')
